home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / glib-2.0 / glib / gmain.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  10.5 KB  |  319 lines

  1. /* gmain.h - the GLib Main loop
  2.  * Copyright (C) 1998-2000 Red Hat, Inc.
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Library General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the GNU
  12.  * Library General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Library General Public
  15.  * License along with this library; if not, write to the
  16.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  17.  * Boston, MA 02111-1307, USA.
  18.  */
  19.  
  20. #ifndef __G_MAIN_H__
  21. #define __G_MAIN_H__
  22.  
  23. #include <glib/gslist.h>
  24. #include <glib/gthread.h>
  25.  
  26. G_BEGIN_DECLS
  27.  
  28. typedef struct _GMainContext            GMainContext;    /* Opaque */
  29. typedef struct _GMainLoop            GMainLoop;    /* Opaque */
  30. typedef struct _GSource                    GSource;
  31. typedef struct _GSourceCallbackFuncs    GSourceCallbackFuncs;
  32. typedef struct _GSourceFuncs            GSourceFuncs;
  33.  
  34. typedef gboolean (*GSourceFunc)       (gpointer data);
  35. typedef void     (*GChildWatchFunc)   (GPid     pid,
  36.                        gint     status,
  37.                        gpointer data);
  38. struct _GSource
  39. {
  40.   /*< private >*/
  41.   gpointer callback_data;
  42.   GSourceCallbackFuncs *callback_funcs;
  43.  
  44.   GSourceFuncs *source_funcs;
  45.   guint ref_count;
  46.  
  47.   GMainContext *context;
  48.  
  49.   gint priority;
  50.   guint flags;
  51.   guint source_id;
  52.  
  53.   GSList *poll_fds;
  54.   
  55.   GSource *prev;
  56.   GSource *next;
  57.  
  58.   gpointer reserved1;
  59.   gpointer reserved2;
  60. };
  61.  
  62. struct _GSourceCallbackFuncs
  63. {
  64.   void (*ref)   (gpointer     cb_data);
  65.   void (*unref) (gpointer     cb_data);
  66.   void (*get)   (gpointer     cb_data,
  67.          GSource     *source, 
  68.          GSourceFunc *func,
  69.          gpointer    *data);
  70. };
  71.  
  72. typedef void (*GSourceDummyMarshal) (void);
  73.  
  74. struct _GSourceFuncs
  75. {
  76.   gboolean (*prepare)  (GSource    *source,
  77.             gint       *timeout_);
  78.   gboolean (*check)    (GSource    *source);
  79.   gboolean (*dispatch) (GSource    *source,
  80.             GSourceFunc callback,
  81.             gpointer    user_data);
  82.   void     (*finalize) (GSource    *source); /* Can be NULL */
  83.  
  84.   /* For use by g_source_set_closure */
  85.   GSourceFunc     closure_callback;       
  86.   GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
  87. };
  88.  
  89. /* Any definitions using GPollFD or GPollFunc are primarily
  90.  * for Unix and not guaranteed to be the compatible on all
  91.  * operating systems on which GLib runs. Right now, the
  92.  * GLib does use these functions on Win32 as well, but interprets
  93.  * them in a fairly different way than on Unix. If you use
  94.  * these definitions, you are should be prepared to recode
  95.  * for different operating systems.
  96.  *
  97.  *
  98.  * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
  99.  * descriptor as provided by the C runtime) that can be used by
  100.  * MsgWaitForMultipleObjects. This does *not* include file handles
  101.  * from CreateFile, SOCKETs, nor pipe handles. (But you can use
  102.  * WSAEventSelect to signal events when a SOCKET is readable).
  103.  *
  104.  * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
  105.  * indicate polling for messages.
  106.  *
  107.  * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
  108.  * (GTK) programs, as GDK itself wants to read messages and convert them
  109.  * to GDK events.
  110.  *
  111.  * So, unless you really know what you are doing, it's best not to try
  112.  * to use the main loop polling stuff for your own needs on
  113.  * Win32. It's really only written for the GIMP's needs so
  114.  * far.
  115.  */
  116. typedef struct _GPollFD GPollFD;
  117. typedef gint    (*GPollFunc)    (GPollFD *ufds,
  118.                  guint      nfsd,
  119.                  gint     timeout_);
  120.  
  121. struct _GPollFD
  122. {
  123.   gint        fd;
  124.   gushort     events;
  125.   gushort     revents;
  126. };
  127.  
  128. /* Standard priorities */
  129.  
  130. #define G_PRIORITY_HIGH            -100
  131. #define G_PRIORITY_DEFAULT          0
  132. #define G_PRIORITY_HIGH_IDLE        100
  133. #define G_PRIORITY_DEFAULT_IDLE     200
  134. #define G_PRIORITY_LOW                300
  135.  
  136. /* GMainContext: */
  137.  
  138. GMainContext *g_main_context_new       (void);
  139. GMainContext *g_main_context_ref       (GMainContext *context);
  140. void          g_main_context_unref     (GMainContext *context);
  141. GMainContext *g_main_context_default   (void);
  142.  
  143. gboolean      g_main_context_iteration (GMainContext *context,
  144.                     gboolean      may_block);
  145. gboolean      g_main_context_pending   (GMainContext *context);
  146.  
  147. /* For implementation of legacy interfaces
  148.  */
  149. GSource      *g_main_context_find_source_by_id              (GMainContext *context,
  150.                                  guint         source_id);
  151. GSource      *g_main_context_find_source_by_user_data       (GMainContext *context,
  152.                                  gpointer      user_data);
  153. GSource      *g_main_context_find_source_by_funcs_user_data (GMainContext *context,
  154.                                   GSourceFuncs *funcs,
  155.                                  gpointer      user_data);
  156.  
  157. /* Low level functions for implementing custom main loops.
  158.  */
  159. void     g_main_context_wakeup  (GMainContext *context);
  160. gboolean g_main_context_acquire (GMainContext *context);
  161. void     g_main_context_release (GMainContext *context);
  162. gboolean g_main_context_wait    (GMainContext *context,
  163.                  GCond        *cond,
  164.                  GMutex       *mutex);
  165.  
  166. gboolean g_main_context_prepare  (GMainContext *context,
  167.                   gint         *priority);
  168. gint     g_main_context_query    (GMainContext *context,
  169.                   gint          max_priority,
  170.                   gint         *timeout_,
  171.                   GPollFD      *fds,
  172.                   gint          n_fds);
  173. gint     g_main_context_check    (GMainContext *context,
  174.                   gint          max_priority,
  175.                   GPollFD      *fds,
  176.                   gint          n_fds);
  177. void     g_main_context_dispatch (GMainContext *context);
  178.  
  179. void      g_main_context_set_poll_func (GMainContext *context,
  180.                     GPollFunc     func);
  181. GPollFunc g_main_context_get_poll_func (GMainContext *context);
  182.  
  183. /* Low level functions for use by source implementations
  184.  */
  185. void g_main_context_add_poll      (GMainContext *context,
  186.                    GPollFD      *fd,
  187.                    gint          priority);
  188. void g_main_context_remove_poll   (GMainContext *context,
  189.                    GPollFD      *fd);
  190.  
  191. int g_main_depth (void);
  192.  
  193. /* GMainLoop: */
  194.  
  195. GMainLoop *g_main_loop_new        (GMainContext *context,
  196.                        gboolean      is_running);
  197. void       g_main_loop_run        (GMainLoop    *loop);
  198. void       g_main_loop_quit       (GMainLoop    *loop);
  199. GMainLoop *g_main_loop_ref        (GMainLoop    *loop);
  200. void       g_main_loop_unref      (GMainLoop    *loop);
  201. gboolean   g_main_loop_is_running (GMainLoop    *loop);
  202. GMainContext *g_main_loop_get_context (GMainLoop    *loop);
  203.  
  204. /* GSource: */
  205.  
  206. GSource *g_source_new             (GSourceFuncs   *source_funcs,
  207.                    guint           struct_size);
  208. GSource *g_source_ref             (GSource        *source);
  209. void     g_source_unref           (GSource        *source);
  210.  
  211. guint    g_source_attach          (GSource        *source,
  212.                    GMainContext   *context);
  213. void     g_source_destroy         (GSource        *source);
  214.  
  215. void     g_source_set_priority    (GSource        *source,
  216.                    gint            priority);
  217. gint     g_source_get_priority    (GSource        *source);
  218. void     g_source_set_can_recurse (GSource        *source,
  219.                    gboolean        can_recurse);
  220. gboolean g_source_get_can_recurse (GSource        *source);
  221. guint    g_source_get_id          (GSource        *source);
  222.  
  223. GMainContext *g_source_get_context (GSource       *source);
  224.  
  225. void g_source_set_callback          (GSource              *source,
  226.                      GSourceFunc           func,
  227.                      gpointer              data,
  228.                      GDestroyNotify        notify);
  229.  
  230.  
  231. /* Used to implement g_source_connect_closure and internally*/
  232. void g_source_set_callback_indirect (GSource              *source,
  233.                      gpointer              callback_data,
  234.                      GSourceCallbackFuncs *callback_funcs);
  235.  
  236. void     g_source_add_poll         (GSource        *source,
  237.                     GPollFD        *fd);
  238. void     g_source_remove_poll      (GSource        *source,
  239.                     GPollFD        *fd);
  240.  
  241. void     g_source_get_current_time (GSource        *source,
  242.                     GTimeVal       *timeval);
  243.  
  244.  /* void g_source_connect_closure (GSource        *source,
  245.                                   GClosure       *closure);
  246.  */
  247.  
  248. /* Specific source types
  249.  */
  250. GSource *g_idle_source_new        (void);
  251. GSource *g_child_watch_source_new (GPid pid);
  252. GSource *g_timeout_source_new     (guint interval);
  253.  
  254. /* Miscellaneous functions
  255.  */
  256. void g_get_current_time                (GTimeVal    *result);
  257.  
  258. /* ============== Compat main loop stuff ================== */
  259.  
  260. #ifndef G_DISABLE_DEPRECATED
  261.  
  262. /* Legacy names for GMainLoop functions
  263.  */
  264. #define     g_main_new(is_running)    g_main_loop_new (NULL, is_running);
  265. #define         g_main_run(loop)        g_main_loop_run(loop)
  266. #define         g_main_quit(loop)       g_main_loop_quit(loop)
  267. #define         g_main_destroy(loop)    g_main_loop_unref(loop)
  268. #define         g_main_is_running(loop) g_main_loop_is_running(loop)
  269.  
  270. /* Functions to manipulate the default main loop
  271.  */
  272.  
  273. #define    g_main_iteration(may_block) g_main_context_iteration      (NULL, may_block)
  274. #define g_main_pending()            g_main_context_pending        (NULL)
  275.  
  276. #define g_main_set_poll_func(func)   g_main_context_set_poll_func (NULL, func)
  277.  
  278. #endif /* G_DISABLE_DEPRECATED */
  279.  
  280. /* Source manipulation by ID */
  281. gboolean g_source_remove                     (guint          tag);
  282. gboolean g_source_remove_by_user_data        (gpointer       user_data);
  283. gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs,
  284.                           gpointer       user_data);
  285.  
  286. /* Idles, child watchers and timeouts */
  287. guint    g_timeout_add_full     (gint            priority,
  288.                  guint           interval,
  289.                  GSourceFunc     function,
  290.                  gpointer        data,
  291.                  GDestroyNotify  notify);
  292. guint    g_timeout_add          (guint           interval,
  293.                  GSourceFunc     function,
  294.                  gpointer        data);
  295. guint    g_child_watch_add_full (gint            priority,
  296.                  GPid            pid,
  297.                  GChildWatchFunc function,
  298.                  gpointer        data,
  299.                  GDestroyNotify  notify);
  300. guint    g_child_watch_add      (GPid            pid,
  301.                  GChildWatchFunc function,
  302.                  gpointer        data);
  303. guint    g_idle_add             (GSourceFunc     function,
  304.                  gpointer        data);
  305. guint    g_idle_add_full        (gint            priority,
  306.                  GSourceFunc     function,
  307.                  gpointer        data,
  308.                  GDestroyNotify  notify);
  309. gboolean g_idle_remove_by_data  (gpointer        data);
  310.  
  311. /* Hook for GClosure / GSource integration. Don't touch */
  312. GLIB_VAR GSourceFuncs g_timeout_funcs;
  313. GLIB_VAR GSourceFuncs g_child_watch_funcs;
  314. GLIB_VAR GSourceFuncs g_idle_funcs;
  315.  
  316. G_END_DECLS
  317.  
  318. #endif /* __G_MAIN_H__ */
  319.